/*
 * JsonHandler.h
 *
 *  Created on: 2024年7月22日
 *      Author: zkswe
 */

#ifndef MISC_JSONHANDLER_H_
#define MISC_JSONHANDLER_H_
#include <iostream>
#include <fstream>
#include "json/json.h"
#include "utils/log.h"

class JsonHandler {
private:
    Json::Value data;
    std::string filename;     // 存储 JSON 文件路径
public:
    JsonHandler() : filename("") {}
    JsonHandler(const std::string& initialFilename) : filename(initialFilename) {}

    bool loadFromFile(const std::string& filename);
    bool loadFromFile();

    void saveToFile(const std::string& filename);

    void saveToFile(const std::string& filename, const Json::Value& value);

    void addDataToArray(const Json::Value& value);

    void removeDataFromArray(int index);

    Json::Value getDataFromArray(int index);

    Json::Value getRoot();

    int getArraySize();

    static const bool parseJson(const std::string& jsonData, Json::Value& val);

    static const bool getObjInt(const Json::Value& json, const std::string& obj, int& val);

    static const bool getObjString(const Json::Value& json, const std::string& obj, std::string& val);

    static const bool getObjBool(const Json::Value& json, const std::string& obj, bool& val);

    static const std::string getText(const Json::Value& json, const std::string& obj);

    // 设置文件名
	void setFilename(const std::string& newFilename);

	// 获取当前文件名
	const std::string& getFilename() const;

	// 保存整数到 JSON 文件
	void saveInt(const std::string& key, int value);

	// 获取整数从 JSON 文件
	int getInt(const std::string& key, int defaultValue = 0);

	// 保存布尔值到 JSON 文件
	void saveBool(const std::string& key, bool value);

	// 获取布尔值从 JSON 文件
	bool getBool(const std::string& key, bool defaultValue = false);
   
};

#endif /* MISC_JSONHANDLER_H_ */
